
Imports System.Data
Imports System.Text
Imports System.Text.Encoding
Imports System.Runtime.InteropServices
Imports System.Xml
Imports System.IO
Imports System.Threading


'*************************************************************************************************
'2018 년 연말정산 간소화 서비스 PDF파일 변환은 카드 부분만 변경되었습니다.
'*************************************************************************************************

'SQL 서버의 테이블 및 저장 프로시저 만든 내용은 국세청 파일 하단에 SQL2010_서버용.TXT 파일에 정리하여 놓았습니다 그대로 복사해서 SQL서버에 붙여 넣기 한후 실행하시면 됩니다.

Public Class Form1


    Public Server As ADODB.Connection   '서버 연결은 ADODB로 한다
    Dim YU_DT As String = "2018" '년말정산 년도
    Public FILE_YN As String   '파일열기성공했을 경우는 "Y"
    Dim XmlText As String      ' 만들어진 XML의값
    Dim filePath As String      ' 파일의 경로 및 이름
    Dim password As String     '  PDF의 패스워드가 있는 경우를 대비해서 사용함


    Public PDF_ME_ID As String = "ME_ID"  '해당되는 사번입니다.


    '******************************************************************************************************************
    '제일먼저 년도를 당해년도라고 정의해 준다
    '******************************************************************************************************************
    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        YU_DT = "2018"
    End Sub




    '******************************************************************************************************************
    '간소화 서비스로 사이트로 이동하기
    '******************************************************************************************************************
    Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
        System.Diagnostics.Process.Start(TextBox2.Text)
    End Sub



    '*****************************************************************************************************************
    '파일찾기 입니다.
    '*****************************************************************************************************************
    Private Sub btnPdf_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPdf.Click
        Dim fileDlg As New OpenFileDialog()
        Dim YN_RR As Integer
        Dim EXE_PATH As String
        On Error GoTo SQLERR

        '리스트 박스의 내용을 지우기 하고
        ListBox1.Items.Clear()

        ProgressBar1.Value = 2

        '국세청 자료 저장하기 물어 본다
        If MsgBox("국세청 PDF 자료로 연말정산 자료를 생성합니다 " + vbCrLf + vbCrLf + "    ☞ 여기서는 김길동 자료료만 테스트 하겠습니다" + vbCrLf + "    ☞ 필요하시면 별도의 경로 설정하셔도 됩니다." + vbCrLf + vbCrLf + "※ 변환후 SQL서버에 저장됩니다.", MsgBoxStyle.YesNo, "저장확인") = MsgBoxResult.No Then
            Exit Sub
        End If


        'PDF_파일을 열기한다
        PDF_Read()

        If FILE_YN = "" Then
            MsgBox("파일 선택이 안된것 같습니다" + vbCrLf + vbCrLf + "   파일을 다시 한번 선택하여 주세요")
            Exit Sub
        End If



        ProgressBar1.Value = 100

        MsgBox("자료 가져오기를 완료하였습니다" + vbCrLf + vbCrLf + "      ☞ 확인해 보시기 바랍니다.")


        Exit Sub

SQLERR:


        MsgBox(Err.Description + vbCrLf + vbCrLf + "  에러코드[OS_0001_S]" + vbCrLf + vbCrLf + "     ☞ 변환에 필요한 자료를 실행합니다. " + vbCrLf + "         ※ 다시 변환하세요 ")
        '****************************************************************************************************
        ' 에러시에는 국세청 YesoneAPISetup.exe 파일을 설치후에 다시 자료 가져오기를 합니다.
        '****************************************************************************************************
        EXE_PATH = System.Windows.Forms.Application.StartupPath
        Shell(EXE_PATH + "\국세청\YesoneAPISetup.exe")

    End Sub







    Sub PDF_Read()
        Dim fileDlg As New OpenFileDialog()
        'Dim EXE_PATH As String
        '파일열기성공시에
        FILE_YN = ""


        'EXE_PATH = System.Windows.Forms.Application.StartupPath
        '****************************************************************************************************
        '파일열기 합니다.
        '****************************************************************************************************
        fileDlg.Filter = "PDF Files(*.PDF)|*.PDF"
        fileDlg.Multiselect = False

        If fileDlg.ShowDialog() = DialogResult.OK Then
            filePath = fileDlg.FileName
            password = String.Empty
        Else
            FILE_YN = ""
            Exit Sub
        End If

        'PDF파일 저장하기
        Call PDF_TEXT()

        FILE_YN = "Y"
    End Sub






    Sub PDF_TEXT()

        Dim SQL As String
        Dim TB As New ADODB.Recordset


        'Dim euckr As Integer = 51949 'EUC-KR 인코딩 값
        Dim strXML As String
        strXML = "XML"

        '열기 성공하기 전에
        FILE_YN = ""

        'On Error GoTo SQLERR

        If String.IsNullOrEmpty(filePath) Then
            Return
        End If

        '******************************************************************
        'PDF파일 가져오기 하고 나서
        '******************************************************************
        Dim fileSize As Integer
        fileSize = EXPFile.NTS_GetFileSize(filePath, password, strXML, 0)

        If fileSize > 0 Then
            Dim buf(fileSize) As Byte
            Dim pBuf As IntPtr = Marshal.UnsafeAddrOfPinnedArrayElement(buf, 0)
            fileSize = EXPFile.NTS_GetFileBuf(filePath, password, strXML, pBuf, 0)
            If (fileSize > 0) Then
                Dim strBuf As New StringBuilder()
                strBuf.Append(Encoding.UTF8.GetString(buf))
                strBuf.Replace("\n", "\r\n")
                XmlText = strBuf.ToString
                XmlText = Mid(XmlText, 40, Len(XmlText) - 40)
            End If
        End If



        'SQL서버 연결하기
        DBOPEN()

        PDF_ME_ID = tME_ID.Text
        '****************************************************************************************************
        '만들어진 XML 자료를 저장하기 한다  저장프로시저 1
        '****************************************************************************************************
        SQL = "EXEC X_YU_2018_XML '" + YU_DT + "','" + PDF_ME_ID + "','TTTT'"
        TB.Open(SQL, Server, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockPessimistic)
        If TB.BOF Then TB.AddNew()
        TB.Fields("DT").Value = YU_DT
        TB.Fields("ME_ID").Value = PDF_ME_ID  ' CNS_ME_ID
        TB.Fields("YU_NO").Value = "TTTT"
        TB.Fields("DU_XML").Value = XmlText

        TB.Update()
        TB.Close()


        '****************************************************************************************************
        '만들어진 XML 자료를 PDF자료에 별도로 하나씩 필드별 분리 저장하기 한다   2017년과 다르게 2018년에는 카드 부분이 변경되었습니다.
        '****************************************************************************************************
        SQL = "EXEC X_YU_2018_XML;2 '" + YU_DT + "','" + PDF_ME_ID + "','TTTT'"
        TB.Open(SQL, Server, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockPessimistic)


        '열기 성공했으면
        FILE_YN = "Y"



    End Sub










    'SQL 서버연결하기   ADODB를 사용해서 DB연결입니다.   
    Sub DBOPEN()
        '서버 아이피 번호  변경해주어야 합니다.  이것은 이그잭스 내부 서버 번호 입니다...접속 안되는거 아시죠....
        Dim SERVER_IP_NO As String = "192.168.55.232"  '☜ 해당서버의 아이피 번호로 바꾸야 합니다.
        '서버의 패스워드
        Dim SERVER_IP_PASS As String = "@1QAZ2WSX"   '☜ 해당서버의 패스워드.

        '해당되는 서버는?
        '// SERVER : 192.168.55.232
        '      Pass: @1QAZ2WSX
        '       DB : CNSA  
        '    TABLE : YU_2018_XML_TB

        '서버연결하기
        Server = New ADODB.Connection
        With Server
            .CursorLocation = ADODB.CursorLocationEnum.adUseClient
            .ConnectionString = "Provider=SQLOLEDB.1;server=" + SERVER_IP_NO + ";uid=sa;pwd=" + SERVER_IP_PASS + ";database=CNSA;Connect Timeout=300"
            .Open()
        End With

    End Sub











End Class
